הצלחתי בעבר לעשות שימוש בפונקציה
exec();
ולכתוב לcommand line (CMD) אך משום מה בתוכנה הזו זה לא עובד לי.

פרטים נוספים:
אני עובד על סביבת חלונות (IIS) ומריץ תוכנה בשם
ffmpeg.exe
אותה ניתן להוריד בחינם מ
ffmpeg.org

המטרה שלי היא שמשתמש יוכל להעלות קובץ מולטימדיה מסוג מסויים (נניח WMA) ולהמיר אותו לסוג אחר (נניח MP3).

כשאני פותח את הCMD, משנה את הנתיב למקום בו הקובץ ffmpeg.exe נמצא ורושם:
ffmpeg -i original.wma new.mp3
התוכנה מופעלת ונוצר הקובץ בפורמט החדש.
לעומת זאת, כאשר אני רושם את הפקודה בPHP זה לא עובד.

מידע נוסף שנעזרתי בו נמצא כאן:
http://www.php.net/manual/en/book.exec.php
אך אולי יש גישה אחרת לפיתרון..

אשמח לעזרה בעניין!!!!
[email protected]

3 תשובות

avatar ענה intval ב 28 לאוגוסט 2012 #

הסיבה לזה, כנראה, בגלל שאת ה CMD אתה פותח בתיקיה שבה נמצאים הקבצים
ואז ffmpeg מופעל ומחפש את הקבצים באותה תיקיה שבה פתחת את ה CMD.

אילו הסקריפט נמצא בתיקיה אחרת. ffmpeg מופעל (אם בכלל) ולא מוצא את הקבצים.
הפתרון יהיה להפעיל את הפקודה עם הנתיבים המלאים:

exec('C:\blabla\ffmpeg.exe -i C:\input\original.wma C:\output\new.mp3');

avatar ענה mat ב 28 לאוגוסט 2012 #

אם יש רווחים בכתובות צריך להוסיף " משני הכוונים לכל כתובת.

avatar ענה oferrotem ב 29 לאוגוסט 2012 #

תודה על התשובות הזריזות!
האמת שרשמתי את זה אחרי שחשבתי שאני קרוב להתחרפן, אבל באמת הבעיה שלי הייתה נתיב עם רווחים... בסוף גיליתי איך מאפשרים הודעות שגיאה מפורטות (1&<2), ואז התקבלה הודעה בסגנון "לא מזהה את הפקודה c:\Program" ואז פשוט שיניתי לנתיב ללא רווחים וזה פתר את הבעיה. להבא אני אזכור את הטיפ:
"אם יש רווחים בכתובות צריך להוסיף " משני הכוונים לכל כתובת."

המון תודה לשניכם!! :)